{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "import torch\n",
    "import numpy as np\n",
    "import cv2\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as patches\n",
    "from torch.distributions import Normal, Uniform\n",
    "from torch.distributions.kl import kl_divergence\n",
    "from torch.nn import functional as F\n",
    "\n",
    "from spair import debug_tools\n",
    "from spair.modules import stn\n",
    "\n",
    "\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% \n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true,
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "torch.Size([20, 9, 30])"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 1
    }
   ],
   "source": [
    "\n",
    "B = 20\n",
    "H = 10\n",
    "W = 11\n",
    "Context = 30\n",
    "\n",
    "t = torch.arange(B * H * W * Context)\n",
    "t2 = t.reshape(B, H, W, Context)\n",
    "\n",
    "t3 = t2[:, 2:5, 2:5, ...]\n",
    "t4 = t3.contiguous().view(B, 9, Context)\n",
    "t4.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [],
   "source": [
    "\n",
    "range = 5\n",
    "\n",
    "cols = np.arange(-range, range) \n",
    "rows = np.arange(-range, 1) # previous visited rows, including current row\n",
    "mesh = np.meshgrid(cols, rows)\n",
    "rotated = np.array(mesh).T\n",
    "flattened = np.reshape(rotated, (-1, 2))  # flattens \n",
    "coords = flattened[:-range, :] # A list of coords \n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "x grad tensor([[0.0400, 0.0400, 0.0400],\n        [0.0400, 0.0400, 0.0400],\n        [0.0400, 0.0400, 0.0400]], dtype=torch.float64)\nx2 grad tensor([[0.0400, 0.0400],\n        [0.0400, 0.0400]], dtype=torch.float64)\nx3 grad tensor(0.0400)\ntensor([[0.0010, 0.0010, 0.0010, 0.0010, 0.0010],\n        [0.0010, 0.0010, 0.0010, 0.0010, 0.0010],\n        [0.0010, 0.0010, 0.0010, 0.0010, 0.0010],\n        [0.0010, 0.0010, 0.0010, 0.0010, 0.0010],\n        [0.0010, 0.0010, 0.0010, 0.0010, 0.0010]], dtype=torch.float64)\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "\n",
    "\n",
    "# Testing if sliding index could \n",
    "x = torch.tensor(np.ones((3,3)) * 3., requires_grad=True)\n",
    "\n",
    "x2 = torch.tensor(np.ones((2,2)) * 2, requires_grad=True)\n",
    "x3 = torch.tensor(1., requires_grad=True)\n",
    "y = torch.tensor(np.ones((5,5)) * 5, requires_grad=False)\n",
    "y[:3,:3] = x \n",
    "y[3:,3:] += x2\n",
    "y[4,2] = x3\n",
    "\n",
    "v = torch.ones(5, 5, dtype=torch.double) * 0.001\n",
    "\n",
    "\n",
    "# Testing frozen gradients\n",
    "g = 0.6\n",
    "\n",
    "y = g * y.detach() + (1-g) * y\n",
    "\n",
    "out = y * 100\n",
    "out.backward(v)\n",
    "\n",
    "print('x grad', x.grad)\n",
    "print('x2 grad', x2.grad)\n",
    "print('x3 grad', x3.grad)\n",
    "print(v)\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "Testing Distribution stuff\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "tensor([[16.8388,  8.8837, 21.1495,  8.7082, 12.4242],\n        [14.4011,  7.4555, 21.8633,  9.5328, 13.6611],\n        [13.8057, 26.1755,  8.2373, 10.1558,  7.3999],\n        [14.4117, 11.7476, 14.8190,  7.4312,  5.0163],\n        [22.2008, 14.0156,  5.7998, 15.3988,  6.7364]])\nNormal(loc: 5.0, scale: 1.0)\nNormal(loc: torch.Size([5, 5]), scale: torch.Size([5, 5]))\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "means = torch.randn(5,5)\n",
    "sigmas  = torch.randn(5,5) \n",
    "q = Normal(loc=means, scale=sigmas)\n",
    "#q = q.rsample()[None,...]\n",
    "\n",
    "p = Normal(loc=5, scale=1)\n",
    "#p = p.rsample()[None,...]\n",
    "\n",
    "z = kl_divergence(q, p)\n",
    "print(z)\n",
    "print(p)\n",
    "print(q)\n",
    "#print(q.log())\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "Testing SNT\n"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.figure.Figure at 0x134973cf8>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "img_BGR = cv2.imread('spair/data/testimg.png')\n",
    "img = img_BGR[..., ::-1].astype(np.float) # BGR to RGB\n",
    "img /= 255. # color space [0, 1]\n",
    "img = torch.from_numpy(np.array([np.moveaxis(img, [0,1,2], [1,2,0])], dtype=np.float32))\n",
    "\n",
    "debug_tools.plot_torch_image_in_pyplot(img)\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.figure.Figure at 0x136b824e0>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "<matplotlib.figure.Figure at 0x136bdfb00>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z_where = torch.tensor([0.5, 0.5, 0.8, 0.8])\n",
    "out_dim = [45, 45]\n",
    "\n",
    "out_img = stn(img, z_where, out_dim, device=torch.device('cpu'))\n",
    "debug_tools.plot_torch_image_in_pyplot(out_img)\n",
    "\n",
    "#z_where = torch.tensor([0, 0, 1, 1])\n",
    "out_dim = [128, 128]\n",
    "out_img_inverse = stn(out_img, z_where, out_dim, device=torch.device('cpu'), inverse=True)\n",
    "debug_tools.plot_torch_image_in_pyplot(out_img_inverse)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "outputs": [],
   "source": [
    "def stn(image, z_where, output_dims, inverse=False):\n",
    "    \"\"\"\n",
    "    Slightly modified based on https://github.com/kamenbliznashki/generative_models/blob/master/air.py\n",
    "\n",
    "    spatial transformer network used to scale and shift input according to z_where in:\n",
    "            1/ x -> x_att   -- shapes (H, W) -> (attn_window, attn_window) -- thus inverse = False\n",
    "            2/ y_att -> y   -- (attn_window, attn_window) -> (H, W) -- thus inverse = True\n",
    "    inverting the affine transform as follows: A_inv ( A * image ) = image\n",
    "    A = [R | T] where R is rotation component of angle alpha, T is [tx, ty] translation component\n",
    "    A_inv rotates by -alpha and translates by [-tx, -ty]\n",
    "    if x' = R * x + T  -->  x = R_inv * (x' - T) = R_inv * x - R_inv * T\n",
    "    here, z_where is 3-dim [scale, tx, ty] so inverse transform is [1/scale, -tx/scale, -ty/scale]\n",
    "    R = [[s, 0],  ->  R_inv = [[1/s, 0],\n",
    "         [0, s]]               [0, 1/s]]\n",
    "    \"\"\"\n",
    "\n",
    "    # TODO Test stn\n",
    "    yt, xt, ys, xs = torch.chunk(z_where, 4, dim=-1)\n",
    "    yt = yt.squeeze()\n",
    "    xt = xt.squeeze()\n",
    "    ys = ys.squeeze()\n",
    "    xs = xs.squeeze()\n",
    "\n",
    "    batch_size = image.shape[0]\n",
    "    out_dims = [batch_size, 3] + output_dims # [Batch, RGB, obj_h, obj_w]\n",
    "\n",
    "    # yt/xt give top/left but here we need center\n",
    "    #yt += (ys / 2)  # TODO ? Why multiply by 2, to upsample?\n",
    "    yt = (yt + (ys / 2)) * 2 - 1\n",
    "    xt = (xt + (xs / 2)) * 2 - 1\n",
    "\n",
    "    # TODO  Clarification on the resampling process.\n",
    "\n",
    "    theta = torch.zeros(2, 3).repeat(batch_size, 1, 1)\n",
    "\n",
    "    # set scaling\n",
    "    theta[:, 0, 0] = xs  # TODO This scaling might not be compatible with pytorch affine_Grid\n",
    "    theta[:, 1, 1] = ys\n",
    "    # set translation\n",
    "    theta[:, 0, -1] = xt\n",
    "    theta[:, 1, -1] = yt\n",
    "    \n",
    "    if inverse:\n",
    "        t = torch.tensor([0. ,0. ,1.]).repeat(batch_size,1,1)\n",
    "        t = torch.cat([theta, t], dim=-2)\n",
    "        t = t.inverse()\n",
    "        theta = t[:, :2,:]\n",
    "        out_dims = [batch_size, 3] + output_dims  # [Batch, RGBA, obj_h, obj_w]\n",
    "\n",
    "    # 2. construct sampling grid\n",
    "    grid = F.affine_grid(theta, out_dims)\n",
    "\n",
    "    # 3. sample image from grid\n",
    "    input_glimpses = F.grid_sample(image, grid, padding_mode='zeros')\n",
    "    # debug_tools.plot_stn_input_and_out(input_glimpses)\n",
    "\n",
    "\n",
    "    return input_glimpses"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "rf_size: [31 31]\ngrid_cell_size: [12 12]\nn_grid_cells: [11 11]\npre_padding: [9 9]\npost_padding: [14 14]\nrequired_image_size: [151 151]\n[11 11]\n[12 12]\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "\n",
    "\n",
    "inp = np.ones([1, 128, 128, 3])\n",
    "\n",
    "layers = [\n",
    "    dict(filters=128, kernel_size=4, stride=3),\n",
    "    dict(filters=128, kernel_size=4, stride=2),\n",
    "    dict(filters=128, kernel_size=4, stride=2),\n",
    "    dict(filters=128, kernel_size=1, stride=1),\n",
    "    dict(filters=128, kernel_size=1, stride=1),\n",
    "    dict(filters=128, kernel_size=1, stride=1),\n",
    "]\n",
    "n_grid_dims = 2 \n",
    "# ndim = len([batch, 50, 50, 3]) - 2 = 2\n",
    "ndim = len(inp.shape) - 2 \n",
    "j = np.array((1,)*ndim) # [1, 1]\n",
    "r = np.array((1,)*ndim)\n",
    "receptive_fields = []\n",
    "\n",
    "for layer in layers:\n",
    "    kernel_size = np.array(layer['kernel_size']) # for each layer, [4, 4, 4, 1, .. ]\n",
    "    stride = np.array(layer['stride']) # for each layer, [3, 2, 2, 1, .. ]\n",
    "    r = r + (kernel_size-1) * j # starts at [1, 1] + 3 * [1,1]\n",
    "    j = j * stride # cumulative ratio \n",
    "    receptive_fields.append(dict(size=r, translation=j))\n",
    "\n",
    "\n",
    "# computes the output layer's ratio to input layer \n",
    "grid_cell_size = receptive_fields[-1][\"translation\"][:n_grid_dims] \n",
    "\n",
    "# compute the output layer's absolute size \n",
    "rf_size = receptive_fields[-1][\"size\"][:n_grid_dims]\n",
    "\n",
    "pre_padding = np.floor(rf_size / 2 - grid_cell_size / 2).astype('i')\n",
    "\n",
    "image_shape = np.array([int(i) for i in inp.shape[1:n_grid_dims+1]])\n",
    "\n",
    "n_grid_cells = np.ceil(image_shape / grid_cell_size).astype('i')\n",
    "\n",
    "required_image_size = rf_size + (n_grid_cells-1) * grid_cell_size\n",
    "\n",
    "post_padding = required_image_size - image_shape - pre_padding\n",
    "\n",
    "print(\"rf_size: {}\".format(rf_size))\n",
    "print(\"grid_cell_size: {}\".format(grid_cell_size))\n",
    "print(\"n_grid_cells: {}\".format(n_grid_cells))\n",
    "print(\"pre_padding: {}\".format(pre_padding))\n",
    "print(\"post_padding: {}\".format(post_padding))\n",
    "print(\"required_image_size: {}\".format(required_image_size))\n",
    "\n",
    "print(n_grid_cells)\n",
    "print(grid_cell_size)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.figure.Figure at 0x136bef240>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(1)\n",
    "bg = np.zeros([100,128])\n",
    "rect = patches.Rectangle([10,10],100, 10, linewidth=1,edgecolor='r',facecolor='none')\n",
    "ax.imshow(bg)\n",
    "ax.add_patch(rect)\n",
    "plt.show()\n",
    "\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "tensor([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])\nnansor is tensor\ntensor([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=torch.uint8)\nnan detected\n======== NAN DETECTED =======\nglobal_step : 123\nnansor :\n tensor([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])\n======== END OF NAN DETECTED =======\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "nan_arr = torch.ones(11) * 0.0 / 0\n",
    "print(nan_arr)\n",
    "debug_tools.nan_hunter(nansor = nan_arr, global_step = 123)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  }
 ],
 "metadata": {
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  },
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}